﻿using SLNGP.Core.Fitness;
using SLNGP.Core.GeneticOpearators;
using SLNGP.Core.Initialization;

namespace SLNGP.Core.GeneticPrograms
{
    public class PreconfiguredGeneticProgram : GeneticProgram
    {
        public PreconfiguredGeneticProgram()
        {
            // TODO: before v1 Implement the 3 real initialization algorithms 
            // FirstGenerationInitialization = new HalfAndHalfInitialization();
            FirstGenerationInitialization = new OnlyRootNodeInitialization(10, this);

            // TODO: implement some real opearators here and not random ones
            //GeneticOpearators.Add(new RouletteWheelSelection(this, 40, 10, 50, 0));
            GeneticOpearators.Add(new TournamentCrossoverSelection(40, 10, 50, 0, 3));

            GeneticOpearators.Add(new BasicCrossover());
            GeneticOpearators.Add(new BasicPointMutation());
            GeneticOpearators.Add(new CarryoverToNextGeneration());
            GeneticOpearators.Add(new RemoveDuplicatesGeneticOpearator());
        }
    }
}